﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//	int a = 10;
//	int *p = &a;
//	printf("%d", *p);
//	return 0;
//}
//int main()
//{
//	int m = 0x11223344;
//	char * p = &m;
//	*p = 0;
//	return 0;
//}

//void test1()
//{
//	int n = 10;
//	int m = 20;
//	int* p = &n;
//	*p = 20;//ok?
//	p = &m; //ok?
//}
//void test2()
//{
//	//代码2
//	int n = 10;
//	int m = 20;
//	const int* p = &n;
//	*p = 20;
//	p = &m; //ok?
//}
//void test3()
//{
//	int n = 10;
//	int m = 20;
//	int* const p = &n;
//	*p = 20; //ok?
//	p = &m; //ok?
//}
//void test4()
//{
//	int n = 10;
//	int m = 20;
//	int const* const p = &n;
//	*p = 20; //ok?
//	p = &m; //ok?
//}
//int main()
//{
//	//测试⽆const修饰的情况
//	test1();
//	//测试const放在*的左边情况
//	test2();
//	//测试const放在*的右边情况
//	//test3();
//	////测试*的左右两边都有const
//	//test4();
//	return 0;
//}


/*
指针+-整数
//*/
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = &arr[0];
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", p[i]);//指针+整数
//	//两个写法都可以  *(p + i)
//	}
//	return 0;
//}

/*
指针+-指针
*/
//int my_strlen(char* s)
//{
//	char * p = s;
//	while (*p != '\0')
//	
//		p++;
//		return p - s;
//	
//}
//int main()
//{
//	printf("%d", my_strlen("abc"));
//	return 0;
//}
//int my_strlen(char* s)
//{
//	char* p = s;
//	while (*p != '\0')
//		p++;
//	return p - s;
//
//}
//int main()
//{
//	printf("%d", my_strlen("abc"));
//	return 0;
//}

/*
指针的关系运算
*/
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	while (p < arr+sz)
//	{
//		printf("%d ", *p);
//		p++;
//	}
//	return 0;



/*
指针数组模拟二维数组
*/
//int main()
//{
//	int arr1[5] = { 1,2,3,4,5 };
//	int arr2[5] = { 2,3,4,5,6 };
//	int arr3[5] = { 3,4,5,6,7 };
//	int* parr[3] = { arr1,arr2,arr3 };
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf(" %d", parr[i][j]);
//			//	等价的	  *(*(parr + i) + j)
//		}
//		printf("\n");
//	}
//	return 0;
//}

/*
冒泡排序
*/

//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)  //sz-1表示sz-1趟 例如：十个元素最坏情况下需要9趟才可以完成全部排序
//	{
//		int j = 0;
//		for(j=0;j<sz-1-i;j++)//例如10个元素，已经排好了两个（也就是排了两趟），
//			                //接着在排第三个的时候只需要排7次就可以排除第三个元素。
//		{
//			int tem = 0;
//			if (arr[j] > arr[j + 1])
//			{
//				tem = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tem;
//			}
//		}
//	}
//}
//int main()
//{
//	int arr[10] = { 5,9,4,2,3,1,5,6,7,8 };
//	int sz = sizeof(arr) / sizeof(arr[0]);//求出元素个数
//	bubble_sort(arr, sz);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}



//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)  //sz-1表示sz-1趟 例如：十个元素最坏情况下需要9趟才可以完成全部排序
//	{
//		int j = 0;
//		int find = 1; //假设这一趟已经有序了
//		for (j = 0; j < sz - 1 - i; j++)//例如10个元素，已经排好了两个（也就是排了两趟），
//										//接着在排第三个的时候只需要排7次就可以排除第三个元素。
//		{
//			int tem = 0;
//			if (arr[j] > arr[j + 1])
//			{
//				find = 0;//发生交换，说明无序（还没有排好）
//				tem = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tem;
//			}
//		}
//		if (find == 1) //这⼀趟没交换就说明已经有序，后续⽆序排序了
//			break;
//	}
//}
//int main()
//{
//	int arr[10] = { 5,9,4,2,3,1,5,6,7,8 };
//	int sz = sizeof(arr) / sizeof(arr[0]);//求出元素个数
//	bubble_sort(arr, sz);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}